package com.jl.thread;

/**
 * @author : ljl
 * @date : 15:10 2021/1/7
 */

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

import java.util.concurrent.*;

/**
 * 初始化SpringBean 工厂类
 */
@Component
@Configuration
public class BeanComponents {


    /**
     * 线程池初始化对象
     * 根据自己的实际业务进行扩展,参数数据自行配置
     * 我这里的环境就是,业务方法执行最高7条曲线,所以我设置为10个线程初始化,足够用
     *
     * @return
     */
    @Bean(name = "threadPoolTaskExecutor")
    public ExecutorService executorService() {
        return new ThreadPoolExecutor(40,//池中保持线程数
                45,//最大线程数
                60,//当线程数大于核心时,终止前多余空闲线程等待时间
                TimeUnit.SECONDS,//时间单位为秒
                new LinkedBlockingDeque<>(40),//池内队列最高10个线程
                Executors.defaultThreadFactory(),//执行程序创建新线程使用默认工厂
                new ThreadPoolExecutor.DiscardPolicy());//出现阻塞时使用处理程序

    }
}
